package com.study.modules.designPatterns.No2PolicyMode;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 策略模式接口
 */
public interface Strategy {

    /**
     * 策略模式接口
     * @param num1 num1
     * @param num2 num2
     * @return BigDecimal
     */
    public BigDecimal execute(BigDecimal num1, BigDecimal num2);


}

/**
 * 策略模式实现类：加法
 */
class AddStrategy implements Strategy {
    @Override
    public BigDecimal execute(BigDecimal num1, BigDecimal num2) {
        return num1.add(num2);
    }
}

/**
 * 策略模式实现类：减法
 */
class SubtractStrategy implements Strategy {
    @Override
    public BigDecimal execute(BigDecimal num1, BigDecimal num2) {
        return num1.subtract(num2);
    }
}

/**
 * 策略模式实现类：乘法
 */
class MultiplyStrategy implements Strategy {
    @Override
    public BigDecimal execute(BigDecimal num1, BigDecimal num2) {
        return num1.multiply(num2);
    }
}

/**
 * 策略模式实现类：除法 四舍五入 保留2位小数
 */
class DivideStrategy implements Strategy {
    @Override
    public BigDecimal execute(BigDecimal num1, BigDecimal num2) {
        return num1.divide(num2, 2, RoundingMode.HALF_UP);
    }
}